//让node能连接mysql
const mysql = require('mysql')  //引入mysql包  npm install mysql
const config = require('../config/index.js')

// 创建线程池
const pool = mysql.createPool({
  host: config.database.HOST,
  user: config.database.USERNAME,
  password: config.database.PASSWORD,
  database: config.database.DATABASE,
  port: config.database.PORT
})
// 首先通过pool.getConnection()方法获取数据库连接。

// 这段代码是一个JavaScript对象，名为allService。它包含一个名为query的方法，该方法接受两个参数：sql和values。query方法返回一个Promise对象，用于异步执行数据库查询操作。
// 在Promise的回调函数中，首先通过pool.getConnection()方法获取数据库连接。如果连接过程中发生错误，将调用reject()
// 方法并传递错误对象。如果连接成功，则使用connection.query()方法执行传入的SQL语句，并将结果传递给回调函数。
// 在回调函数中，如果执行SQL语句时发生错误，同样会调用reject()方法并传递错误对象。如果SQL语句执行成功，则调用resolve()方法并传递查询结果。最后，无论查询是否成功，都会调用connection.release()方法来释放数据库连接。
// 这段代码的作用是提供一个异步的数据库查询服务，可以通过调用allService.query(sql, values)方法来执行SQL查询，并返回一个Promise对象，以便在查询完成后进行后续处理。

// 连接数据库，执行sql语句
const allService = {
  query: function (sql, values) {  //query为一个方法
    return new Promise((resolve, reject) => {
      pool.getConnection((err, connection) => { // 连接数据库
        if (err) {
          reject(err)
        } else { // 连接成功
          connection.query(sql, values, (err, rows) => { // 执行sql语句
            if (err) {
              reject(err)
            } else { // sql语句执行成功
              resolve(rows)
            }
            connection.release() // 断开连接
          })
        }
      })
    })
  }
}

// 登录
const userLogin = (username, password) => {
  //用于从名为"users"的表中查询用户名和密码匹配的用户。
  let _sql = `select * from users where username="${username}" and password="${password}";`
  return allService.query(_sql)
}

//注册
const userRegister = (values) => {
  let _sql = `insert into users set username=?,password=?,nickname=?;`
  return allService.query(_sql, values)
}

// 查找是否存在用户
const userFind = (username) => {
  let _sql = `select * from users where username="${username}";`
  return allService.query(_sql)
}

// 查找所有的blog笔记
const findBlogContent = () => {
  let _sql = `select * from blogcontent`
  return allService.query(_sql)
}

// 用户的信息，根据存储的信息
const findUser = (username) => {
  let _sql = `select * from users where username="${username}";`
  return allService.query(_sql)
}


// 修改用户的信息
const changeUserData = (nickname, password, avatar, username, signature) => {
  let _sql = `update users set nickname="${nickname}",password="${password}",avatar="${avatar}",signature="${signature}" where username='${username}';`
  return allService.query(_sql)
}

// 查找原始密码
const findPassword = (username) => {
  let _sql = `select password from users where username="${username}";`;
  return allService.query(_sql)
}

// 根据id查找文章
const idFindBlogDetail = (id) => {
  let _sql = `select * from blogcontent where id="${id}";`
  return allService.query(_sql)
}

// 更具userid查找用户信息
const idfindUser = (userid) => {
  let _sql = `select * from users where id="${userid}";`
  return allService.query(_sql)
}

// 发布博客，根据用户的信息
const blogPublish = (values) => {
  let _sql = `insert into blogcontent set userid=?,title=?,description=?,tag_type=?,c_time=?,article=?,picture=?,nickname=?;`
  return allService.query(_sql, values)

}


// 根据标题关键字搜索，获取信息
const titleFindBlog = (title) => {
  const _sql = `select * from blogcontent where title like "%${title}%"`;
  return allService.query(_sql)
}

// 根据文章id查找评论
const idFindComment = (id) => {
  let _sql = `select * from commenter where userid="${id}";`
  return allService.query(_sql)
}

//发表评论
const leaveComment = (values) => {
  let _sql = `insert into commenter set userid=?,commentator=?,avatar=?,content=?,c_time=?;`
  return allService.query(_sql, values)
}

// 发表二级评论
const leaveSecondaryComment = (values) => {
  let _sql = `insert into commenter1 set name=?,replierName=?,replierContent=?,replierAvatar=?,commentId=?,c_time=?;`
  return allService.query(_sql, values)
}

// 获取二级评论
const findLeaveSecondaryComment = (id) => {
  let _sql = `select * from commenter1 where name="${id}";`
  return allService.query(_sql)
}

// 查找个人文章
const findPpersonalArticles = (id) => {
  let _sql = `select * from blogcontent where userid="${id}";`
  return allService.query(_sql)
}

// 根据文章id删除文章
const deleteArticles = (id) => {
  let idStr = id.join(',');
  let _sql = `delete from blogcontent where id in (${idStr});`
  return allService.query(_sql)
}


module.exports = {
  userLogin,
  userRegister,
  userFind,
  findBlogContent,
  findUser,
  changeUserData,
  findPassword,
  idFindBlogDetail,
  idfindUser,
  blogPublish,
  titleFindBlog,
  idFindComment,
  leaveComment,
  leaveSecondaryComment,
  findLeaveSecondaryComment,
  findPpersonalArticles,
  deleteArticles 


}